home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Magazin: Amiga-CD 1996 September & October
/
Amiga-CD 1996 #9-10.iso
/
demos
/
storm-c
/
stormc
/
include
/
iostream.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-06-13
|
12KB
|
514 lines
#ifndef _INCLUDE_IOSTREAM_H
#define _INCLUDE_IOSTREAM_H
/*
** $VER: iostream.h 1.0 (24.1.96)
** StormC Release 1.1
**
** '(C) Copyright 1995 Haage & Partner Computer GmbH'
** All Rights Reserved
*/
#ifndef __cplusplus
#error <iostream.h> must be compiled in C++ mode.
#pragma +
#endif
#ifndef _INCLUDE_STDDEF_H
#include <stddef.h>
#endif
#ifndef _INCLUDE_STRING_H
#include <string.h>
#endif
#ifndef _INCLUDE_STDIO_H
#include <stdio.h>
#endif
class streambuf;
class ostream;
class istream;
typedef long streamoff;
class streampos {
public:
streampos() { offset = 0; };
streampos(long o) { offset = o; };
operator long() { return offset; };
fpos_t* fpos() { return (fpos_t *) &offset; };
long offset;
};
class ios {
public:
enum io_state {
goodbit = 0x00,
eofbit = 0x01,
failbit = 0x02,
badbit = 0x04,
hardfail = 0x80
};
enum open_mode {
in = 0x01,
out = 0x02,
ate = 0x04,
app = 0x08,
trunc = 0x10,
nocreate = 0x20,
noreplace = 0x40,
binary = 0x80
};
enum seek_dir {
beg = -1,
cur = 0,
end = 1
};
enum {
skipws = 0x00000001,
left = 0x00000002,
right = 0x00000004,
internal = 0x00000008,
dec = 0x00000010,
oct = 0x00000020,
hex = 0x00000040,
showbase = 0x00000080,
showpoint = 0x00000100,
uppercase = 0x00000200,
showpos = 0x00000400,
scientific = 0x00000800,
fixed = 0x00001000,
unitbuf = 0x00002000,
stdio = 0x00004000,
firstfreebit = 0x00008000
};
ios(streambuf *b) { init(b); };
virtual ~ios() { };
unsigned long flags() { return aFlags; };
unsigned long flags(unsigned long f)
{
unsigned long r = aFlags;
aFlags = f;
return r;
};
unsigned long setf(unsigned long f)
{
unsigned long r = aFlags & f;
aFlags |= f;
return r;
};
unsigned long unsetf(unsigned long f)
{
unsigned long r = aFlags & f;
aFlags &= ~f;
return r;
};
unsigned long setf(unsigned long f, unsigned long m)
{
unsigned long r = aFlags & m;
aFlags &= ~m;
aFlags |= (f & m);
return r;
};
int width() { return aWidth; };
int width(int w)
{
int r = aWidth;
aWidth = w;
return r;
};
ostream *tie() { return aTie; };
ostream *tie(ostream *o)
{
ostream *r = aTie;
aTie = o;
return r;
};
char fill() { return aFill; };
char fill(char f)
{
char r = aFill;
aFill = f;
return r;
};
int precision() { return aPrecision; };
int precision(int p)
{
int r = aPrecision;
aPrecision = p;
return r;
};
int rdstate() { return aState; };
int eof() { return aState & eofbit; };
int fail() { return aState & (failbit | badbit | hardfail); };
int bad() { return aState & (badbit | hardfail); };
int good() { return aState == 0; };
void clear(int i = 0) { aState = i; };
operator void *() { return fail() ? 0 : this; };
int operator !() { return fail(); };
streambuf* rdbuf() { return aBuf; };
static void sync_with_stdio() { };
static unsigned long bitalloc();
static int xalloc();
long &iword(int i) { return userword(i); };
void *&pword(int i) { return (void *&) userword(i); };
static const unsigned long basefield;
static const unsigned long adjustfield;
static const unsigned long floatfield;
protected:
ios() { init(NULL); };
void init(streambuf *);
streambuf *aBuf;
int aState;
ostream *aTie;
short int aPrecision;
char aFill;
short aWidth;
unsigned long aFlags;
private:
ios(const ios &);
ios &operator =(const ios &);
static unsigned long aNextBit;
static int aNextWord;
long *aUser;
int aNuser;
long &userword(int i);
};
ios &dec(ios &);
ios &hex(ios &);
ios &oct(ios &);
class streambuf {
protected:
streambuf();
streambuf(char *, int);
public:
virtual ~streambuf();
int in_avail() { return aGTop - aGPos; };
int out_waiting() { return aPPos - aPBase; };
int sbumpc()
{
return (in_avail() > 0 || underflow() != EOF) ? *(aGPos++) : EOF;
};
int sgetc()
{
return in_avail() > 0 ? *aGPos : underflow();
};
int sgetn(char *, int);
int snextc()
{
return sbumpc() == EOF ? EOF : sgetc();
};
void stossc() { sbumpc(); };
int sputbackc(char c)
{
return aGPos > aBase ? (*(--aGPos) = c) : pbackfail(c);
};
int sputc(int c)
{
return aPPos < aTop ? (*(aPPos++) = c) : overflow(c);
};
int sputn(const char *,int);
virtual int sync()
{
return (in_avail() != 0 || out_waiting() != 0) ? EOF : 0;
};
virtual streampos seekoff(streamoff, ios::seek_dir, int = ios::in|ios::out)
{
return (streampos) EOF;
};
virtual streampos seekpos(streampos p, int mode = ios::in|ios::out)
{
return seekoff(streamoff(p),ios::beg,mode);
}
virtual streambuf *setbuf(char *, size_t);
protected:
void setbuffer(char *, unsigned long n, int dynamic = 0);
int allocate()
{
return (aBase == NULL && !aUnbuffered) ? (doallocate() == EOF ? EOF : 1) : 0;
};
int unbuffered() { return aUnbuffered; };
void unbuffered(int i) { aUnbuffered = i; };
virtual int overflow(int = EOF);
virtual int underflow();
virtual int xsputn(const char *,int);
virtual int xsgetn(char *,int);
virtual int pbackfail(int) { return EOF; };
virtual int doallocate();
void pbump(int i) { aPPos += i; };
void gbump(int i) { aGPos += i; };
protected:
char *aBase;
char *aTop;
char *aPBase;
char *aPPos;
char *aGPos;
char *aGTop;
short int aAlloc;
short int aUnbuffered;
};
class istream : virtual public ios {
public:
istream(streambuf *b) : ios(b) { };
virtual ~istream() { };
public:
int ipfx(int need = 0);
void isfx() { };
istream &operator >>(unsigned char *s) { return (*this) >> (char *) s; };
istream &operator >>(signed char *s) { return (*this) >> (char *) s; };
istream &operator >>(char *);
istream &operator >>(char &);
istream &operator >>(unsigned char &c) { return (*this) >> (char &) c; };
istream &operator >>(signed char &c) { return (*this) >> (char &) c; };
istream &operator >>(short &);
istream &operator >>(unsigned short &);
istream &operator >>(int &);
istream &operator >>(unsigned int &);
istream &operator >>(long &);
istream &operator >>(unsigned long &);
istream &operator >>(float &);
istream &operator >>(double &);
istream &operator >>(long double &);
istream &operator >>(streambuf *);
istream &operator >>(istream &(*f)(istream &))
{
return (*f)(*this);
};
istream &operator >>(ios &(*f)(ios &))
{
(*f)(*this);
return *this;
};
istream &get(char *, int, char = '\n');
istream &get(unsigned char *s, int n, char delimiter = '\n')
{
return get((char *) s, n, delimiter);
};
istream &get(signed char *s, int n, char delimiter = '\n')
{
return get((char *) s, n, delimiter);
};
istream &getline(char *, int, char = '\n');
istream &getline(unsigned char *s, int n, char delimiter = '\n')
{
return getline((char *) s, n, delimiter);
};
istream &getline(signed char *s, int n, char delimiter = '\n')
{
return getline((char *) s, n, delimiter);
};
istream &get(streambuf &, char = '\n');
istream &get(signed char &c)
{
return get((char &) c);
};
istream &get(unsigned char &c)
{
return get((char &) c);
};
istream &get(char &);
int get();
istream &ignore(int = 1, int = EOF);
istream &read(unsigned char *s, int n)
{
return read((char *) s, n);
};
istream &read(signed char *s, int n)
{
return read((char *) s, n);
};
istream &read(char *, int);
int gcount() { return aLastCount; };
int peek();
istream &putback(char c)
{
if (good())
rdbuf()->sputbackc(c);
return *this;
};
int sync()
{
return rdbuf()->sync();
};
istream &seekg(streampos);
istream &seekg(streamoff, ios::seek_dir);
streampos tellg()
{
return rdbuf()->seekoff(0,ios::cur,ios::in);
};
protected:
istream() : ios() { };
private:
istream(const istream &);
istream &operator =(const istream &);
int aLastCount;
};
istream &ws(istream &);
class ostream : virtual public ios {
public:
ostream(streambuf *b) : ios(b) { };
virtual ~ostream() { };
public:
int opfx();
void osfx();
ostream &operator <<(signed char c)
{
return (*this) << (char) c;
};
ostream &operator <<(unsigned char c)
{
return (*this) << (char) c;
};
ostream &operator <<(char);
ostream &operator <<(const unsigned char *s)
{
return (*this) << (const char *) s;
};
ostream &operator <<(const signed char *s)
{
return (*this) << (const char *) s;
};
ostream &operator <<(const char *);
ostream &operator <<(short i)
{
return (*this) << (long) i;
};
ostream &operator <<(unsigned short i)
{
return (*this) << (unsigned long) i;
};
ostream &operator <<(int i)
{
return (*this) << (long) i;
};
ostream &operator <<(unsigned int i)
{
return (*this) << (unsigned long) i;
};
ostream &operator <<(long);
ostream &operator <<(unsigned long);
ostream &operator <<(float);
ostream &operator <<(double);
ostream &operator <<(void *);
ostream &operator <<(streambuf *);
ostream &operator <<(ostream &(*f)(ostream &))
{
return (*f)(*this);
};
ostream &operator <<(ios &(*f)(ios &))
{
(*f)(*this);
return *this;
};
ostream &put(char c)
{
if (opfx() != EOF)
rdbuf()->sputc(c);
return *this;
};
ostream &write(const signed char *s, int n)
{
return write((const char *) s,n);
};
ostream &write(const unsigned char *s, int n)
{
return write((const char *) s,n);
};
ostream &write(const char *s, int n)
{
if (opfx() != EOF)
rdbuf()->sputn(s,n);
return *this;
};
ostream &flush()
{
rdbuf()->sync();
return *this;
};
streampos tellp()
{
return rdbuf()->seekoff(0,ios::cur,ios::out);
};
ostream &seekp(streampos, ios::seek_dir = ios::beg);
ostream &seekp(streamoff, ios::seek_dir);
protected:
ostream() : ios() { };
private:
ostream(const ostream &);
ostream &operator =(const ostream &);
};
ostream &flush(ostream &);
ostream &endl(ostream &);
ostream &ends(ostream &);
class iostream : private virtual ios, public ostream, public istream {
public:
iostream(streambuf *b) : ios(b), istream(), ostream() { };
virtual ~iostream() { };
protected:
iostream() : ios(), istream(), ostream() { }
private:
iostream(const iostream &);
iostream &operator =(const iostream &);
};
class istream_withassign : private virtual ios, public istream {
public:
istream_withassign() : ios(0) { };
istream_withassign(streambuf *b) : ios(b) { };
istream_withassign(istream &i) : ios(i.rdbuf()) { };
virtual ~istream_withassign() { };
istream_withassign& operator =(streambuf *b) { init(b); return *this; };
istream_withassign& operator =(istream &i) { init(i.rdbuf()); return *this; };
private:
istream_withassign(const istream_withassign &);
istream_withassign &operator =(const istream_withassign &);
};
class ostream_withassign : private virtual ios, public ostream {
public:
ostream_withassign() : ios(0) { };
ostream_withassign(streambuf *b) : ios(b) { };
ostream_withassign(ostream &o) : ios(o.rdbuf()) { };
virtual ~ostream_withassign() { };
ostream_withassign &operator =(streambuf *b) { init(b); return *this; };
ostream_withassign &operator =(ostream &o) { init(o.rdbuf()); return *this; };
private:
ostream_withassign(const ostream_withassign &);
ostream_withassign &operator =(const ostream_withassign &);
};
class iostream_withassign : private virtual ios, public iostream {
public:
iostream_withassign() : ios(0) { };
iostream_withassign(streambuf *b) : ios(b) { };
iostream_withassign(ios &s) : ios(s.rdbuf()) { };
virtual ~iostream_withassign() { };
iostream_withassign &operator =(streambuf *b) { init(b); return *this; };
iostream_withassign &operator =(ios &s) { init(s.rdbuf()); return *this; };
private:
iostream_withassign(const iostream_withassign &);
iostream_withassign &operator =(const iostream_withassign &);
};
extern istream_withassign& cin;
extern ostream_withassign& cout;
extern ostream_withassign& cerr;
extern ostream_withassign& clog;
#endif